package com.yuw.mapdemo;

import java.util.*;

public class TestDriver {
    public static void main(String[] args) {
        System.out.println("=======================================");
        test01();
        System.out.println("=======================================");
        test011();
        System.out.println("=======================================");
        test012();

    }

    /**
     * 使用泛型
     * map集合--TreeMap
     */
    public static void test012() {
        // 创建一个TreeMap实例对象
        // 面向接口的编程思想
        // 指明了泛型的结合声明
        Map<String, Object> map = new TreeMap<>(); ////////////////
        // 增加元素
        //
        Object object = "nihao";
        map.put("zhangsan", "10010");
        map.put("lisi", "10011");
        map.put("wangwu", "10012");
        map.put("zhaoliu", "10013");
        map.put("zhaoliu", "10014");
        //map.put(null, "10010");
        //map.put(null, null);

        // 遍历元素
        // Map 接口提供三种collection 视图，允许以键集、值集或键-值映射关系集[entry]的形式查看某个映射的内容。【Map可以转换为Collection集合】
        // map的遍历转换为对 entry键值对集合的遍历
        Set<Map.Entry<String, Object>> set = map.entrySet();
        // 此时就转换为对 set 集合的遍历
        Iterator<Map.Entry<String, Object>> iterator = set.iterator();
        while (iterator.hasNext()) {
            // 获取 set 集合的 entry元素对象
            Map.Entry<String,Object> entry  = iterator.next();
            // 强制转换【向下溯型】
            // Map.Entry entry = (Map.Entry) obj;
            String strKey = entry.getKey();
            Object objValue = entry.getValue();
            System.out.println(strKey + "--" + objValue);
        }

        // 增强相的foreach循环进行遍历
        // @TODO 使用foreach遍历entryset

        System.out.println("----------------------------");
        // 将map转换为对 key集的遍历
        Set<String> set1 = map.keySet();
        // key的set集合的遍历
        for (String obj : set1) {
            // obj 是 键值对中的key的值
            Object objValue = map.get(obj);
            System.out.println(obj + "--" + objValue);
        }

        // 将map转变为 value的set集合进行遍历
        Collection collection = map.values();
    }

    /**
     * map集合--LinkedHashMap
     */
    public static void test011() {
        // 创建一个LinkedHashMap实例对象
        // 面向接口的编程思想
        Map map = new LinkedHashMap(); /////////////////
        // 增加元素
        map.put("zhangsan", "10010");
        map.put("lisi", "10011");
        map.put("wangwu", "10012");
        map.put("zhaoliu", "10013");
        map.put("zhaoliu", "10014");
        map.put(null, "10010");
        map.put(null, null);

        // 遍历元素
        // Map 接口提供三种collection 视图，允许以键集、值集或键-值映射关系集[entry]的形式查看某个映射的内容。【Map可以转换为Collection集合】
        // map的遍历转换为对 entry键值对集合的遍历
        Set set = map.entrySet();
        // 此时就转换为对 set 集合的遍历
        Iterator iterator = set.iterator();
        while (iterator.hasNext()) {
            // 获取 set 集合的 entry元素对象
            Object obj = iterator.next();
            // 强制转换【向下溯型】
            Map.Entry entry = (Map.Entry) obj;
            String strKey = (String) entry.getKey();
            Object objValue = entry.getValue();
            System.out.println(strKey + "--" + objValue);
        }

        // 增强相的foreach循环进行遍历
        // @TODO 使用foreach遍历entryset

        System.out.println("----------------------------");
        // 将map转换为对 key集的遍历
        Set set1 = map.keySet();
        // key的set集合的遍历
        for (Object obj : set1) {
            // obj 是 键值对中的key的值
            Object objValue = map.get(obj);
            System.out.println(obj + "--" + objValue);
        }

        // 将map转变为 value的set集合进行遍历
        Collection collection = map.values();
    }

    /**
     * map集合--hashmap
     */
    public static void test01() {
        // 创建一个hashmap实例对象
        // 面向接口的编程思想
        Map map = new HashMap();
        // 增加元素
        map.put("zhangsan", "10010");
        map.put("lisi", "10011");
        map.put("wangwu", "10012");
        map.put("zhaoliu", "10013");
        map.put("zhaoliu", "10014");
        map.put(null, "10010");
        map.put(null, null);

        // 遍历元素
        // Map 接口提供三种collection 视图，允许以键集、值集或键-值映射关系集[entry]的形式查看某个映射的内容。【Map可以转换为Collection集合】
        // map的遍历转换为对 entry键值对集合的遍历
        Set set = map.entrySet();
        // 此时就转换为对 set 集合的遍历
        Iterator iterator = set.iterator();
        while (iterator.hasNext()) {
            // 获取 set 集合的 entry元素对象
            Object obj = iterator.next();
            // 强制转换【向下溯型】
            Map.Entry entry = (Map.Entry) obj;
            String strKey = (String) entry.getKey();
            Object objValue = entry.getValue();
            System.out.println(strKey + "--" + objValue);
        }

        // 增强相的foreach循环进行遍历
        // @TODO 使用foreach遍历entryset

        System.out.println("----------------------------");
        // 将map转换为对 key集的遍历
        Set set1 = map.keySet();
        // key的set集合的遍历
        for (Object obj : set1) {
            // obj 是 键值对中的key的值
            Object objValue = map.get(obj);
            System.out.println(obj + "--" + objValue);
        }

        // 将map转变为 value的set集合进行遍历
        Collection collection = map.values();
    }

}
